package main

import (
	"fmt"
	"sort"
)

/**
你正在参加一个多角色游戏，每个角色都有两个主要属性：攻击 和 防御 。给你一个二维整数数组 properties ，其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。

如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级，则认为该角色为 弱角色 。更正式地，
如果认为角色 i 弱于 存在的另一个角色 j ，那么 attackj > attacki 且 defensej > defensei 。

*/
func numberOfWeakCharacters(properties [][]int) int {
	/*
		排序是关键，根据攻击力由高到低排序，这样我们只用循环一遍，去比较防御力就可以了
		一个问题在于，相同攻击力的情况下，防御力可能有高有低
		所以我们在排序的时候，按照 攻击力的降序，防御力的升序排序
		这样可以做到，后面的角色攻击力一定≤前面的角色，攻击力相等时，防御力一定≥前面的角色
		所以只需要从最左边开始找防御力依次低的角色就可以了
	*/
	sort.Slice(properties, func(i, j int) bool {
		return properties[i][0] > properties[j][0] || properties[i][0] == properties[j][0] && properties[i][1] < properties[j][1]
	})
	fmt.Println(properties)

	num := 0
	maxD := 0
	for _, property := range properties {
		if property[1] < maxD {
			num++
		} else {
			maxD = property[1]
		}
	}
	return num
}

func main() {
	var properties = [][]int{{7, 7}, {1, 2}, {9, 7}, {7, 3}, {3, 10}, {9, 8}, {8, 10}, {4, 3}, {1, 5}, {1, 5}}
	characters := numberOfWeakCharacters(properties)
	fmt.Println(characters)
}
